import router,{constantRoutes} from '../router'
import store from '../store'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { param2Obj } from '@/utils'
import { getToken, getDefaultPath, setDefaultPath } from '@/utils/auth'
import { list,getOneLevel,getChildrenMenus } from '@/api/modules/menu'

// 进度条配置
NProgress.configure({ showSpinner: false })
// 直接通过url访问该系统携带的参数
const { source, tokenKey } = param2Obj(location.href)
const isBoss = source === ''
// 不进行重定向白名单
const whiteList = ['/login','/loginText']
router.beforeEach((to, from, next) => {
  // 进度条初始化
  NProgress.start()
   if (getToken()) {
     // 登录过就不能访问登录界面，需要中断这一次路由守卫，执行下一次路由守卫，并且下一次守卫的to是主页'
     if (to.path === '/loginText') {
       next()
     }else if(to.path==='/'){
		 next(`/index`)
	 }
     // 保存在store中路由不为空则放行 (如果执行了刷新操作，则 store 里的路由为空，此时需要重新添加路由)
     if (store.getters.permission_routes.length || whiteList.indexOf(to.path) !== -1) {
       //放行
       next()
     } else {
        getOneLevel().then((label)=>{
          store.dispatch('menu/updateAllmenu',label.data)
          list({parentId:label.data[0].id}).then(res => {
            // 渲染侧边栏菜单
            store.dispatch('menu/updateRoutes', res.data)
            store.dispatch('user/getInfo')
            next({ ...to, replace: true })
          })
        })
        .catch(err => {
          store.dispatch('user/resetToken').then(_ => {
            next(`/loginText`)
            NProgress.done()
          })
        })
     }
   } else {
      // 未登录
      if (whiteList.indexOf(to.path) !== -1) {
        // 在免登录白名单中直接进入
        next()
      } else {
        // 其它无权访问的页面，删除令牌，被重定向到登录页
        store.dispatch('user/resetToken').then(_ => {
          next(`/login`)
          NProgress.done()
        })
      } 
   }
})
router.afterEach(() => {
  // 进度条完成
  NProgress.done()
})
